 /*
 * 工程简易客户端
 *  1、实现简易功能
 *      登录  注册  找回密码
 *  2、设计连接服务器的函数
 *
 */
 
 
 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <netinet/in.h>

#include "common.h"
#include "cmd_color.h"

int conn_init(const char *ip, const int port);
void print_menu();
void init_sys();
void exit_sys();

int main(int argc, const char* argv[])
{
	if (argc != 3) {
		printf("命令格式： cmd ip_addr port");
		return 0;
	}
	
	ConnPack pack;
	char ack_buf[128];
	strcpy(pack.header,"PARK"); // 组装协议头
	
	int sock_fd;
	if (-1 == (sock_fd = conn_init(argv[1], atoi(argv[2])))) {
		return -1;
	}
	
	int menu_item = 0;
	int i;
	char name[32] = "";
	char passwd[32] = "";
	char ch;
	while (1) {
		print_menu();
		scanf("%d", &menu_item);
		if (menu_item == 0)
			return 0;
		switch (menu_item) {
			case 2: // register
				printf("\n **注册页面** \n");
				bzero(name, sizeof(name));
				printf("姓名：");
				scanf("%s", name);
				bzero(passwd, sizeof(passwd));
				printf("密码：");
				scanf("%s", passwd);
				printf("%s, %s\n", name, passwd);
			break;
			case 1:
				printf("\n **登录页面** \n");
				bzero(name, sizeof(name));
				printf("姓名：");
				scanf("%s", name);
				getchar();
				bzero(passwd, sizeof(passwd));
				printf("密码：");
				init_sys();
				//scanf("%s", passwd);
				i = 0;
				while ((ch = getchar()) != '\n') { // 密码处理
					passwd[i++] = ch;
					putchar('*');
				}
				exit_sys();
				printf("\n%s, %s\n", name, passwd);
				// 向服务器发起登录请求
				pack.type = LOGIN; // login
				strcpy(pack.name, name);
				strcpy(pack.passwd, passwd);
				if (-1 == write(sock_fd, &pack, sizeof(pack))) {
					perror("write");
				}
				//sleep(10);
				//等待服务器的回应
				bzero(ack_buf, sizeof(ack_buf));
				if (-1 == read(sock_fd, ack_buf, sizeof(ack_buf))) {
					perror("read");
				}
				printf("Server response:%s\n", ack_buf);
				getchar();
			break;
		}
	}
	// 关闭连接
	close(sock_fd);
    return 0;
}
// 初始化连接
int conn_init(const char *ip, const int port)
{
	// 创建socket
	int sock_fd;
	sock_fd = socket(AF_INET, SOCK_STREAM, 0);
	if (sock_fd == -1) {
		perror("socket");
		return -1;
	}
	// 向服务器发起连接
	int ret;

	struct sockaddr_in server_addr;
	server_addr.sin_family = AF_INET; // 协议族
	server_addr.sin_port = htons(port); // 指定服务器的端口号
	server_addr.sin_addr.s_addr = inet_addr(ip); // 指定服务器IP地址
	
	ret = connect(sock_fd, (struct sockaddr *)&server_addr, sizeof(server_addr));
	if (ret == -1) {
		perror("connect");
		return -1;
	}
	return sock_fd;
}

/*
*/
void init_sys()
{
	//printf("\033[2J");           // 清屏
	system("stty -icanon");      // 关闭缓冲
	system("stty -echo");        // 关闭回显
	fprintf(stdout, "\033[?25l"); // 隐藏光标
	fflush(stdout);              // 刷新
}

void exit_sys(void)
{
	system("stty icanon");          // 恢复缓冲
	system("stty echo");            // 恢复回显
	fprintf(stdout, "\033[?25h");   // 显示鼠标
	//fputc('\n', stdout);            // 让终端提示符下一行显示
	//system("clear");
	//exit(0);                        // 退出系统
}

/*
打印菜单
*/
void print_menu()
{
	system("clear");
	printf("\n欢迎使用智能泊车系统\n");
	printf("------------------------\n");
	printf(" 登录 ----------------[1] \n");
	printf(" 注册 ----------------[2] \n");
	printf(" 找回密码 ------------[3] \n");
	printf(" 退出 ----------------[0] \n");
	printf("------------------------\n");
	printf("Ener:");
}
